Acabo de buscar a través de SO y parece que todos están de acuerdo con la idea de que JavaScript y TypeScript no admiten el uso directo de números como claves en un objeto. Pero de alguna manera, mi compañero desarrollador ha usado algunos objetos con claves numéricas en nuestro proyecto Angular que funcionan tan bien como otros objetos. Esto es lo que parecen.
{ 1: 1, 2: 0, 3: 2 } Y llamar al valor en una forma como obj[2] no tiene ningún problema en este momento. Solo me preguntaba si es la forma correcta de hacerlo y qué tan bien se admite este uso.
Está bien, como en - es legal , ya que es cómo funcionan las matrices, aunque una cosa a tener en cuenta es que las matrices garantizarán que la clave sea incremental, comenzando en 0, mientras que una clave numérica en un objeto no lo hará, y SERÁ engañosa para otros desarrolladores cuando no pueden entender por qué obj[1] no siempre vive al lado de obj[2], etc., y con eso me refiero al uso de bucles internos, etc. y simplemente incrementando el índice en uno cada vez. Entonces, personalmente, no lo recomendaría debido a que parece una matriz, pero en realidad no es una matriz...
Lado: si está tratando de imitar una matriz, pero quiere un índice que comience en 1, simplemente use una matriz como de costumbre y haga que su código solo maneje el desplazamiento cada vez. Las matrices vienen con muchas funciones, como length , sort , find , etc., que un objeto no
En javascript, las claves en el objeto son de tipo cadena y si tiene obj[1] , se convertirá automáticamente en obj['1'] pero no lo mismo en el Map
const obj = {} obj[1] = 'one'; console.log(obj[1]); // output: "one" console.log(obj['1']); // output: "one" obj['1'] = 'one string'; console.log(obj[1]); // output: "one string" console.log(obj['1']); // output: "one string" const map = new Map(); map.set(1, 'one'); map.set('1', 'one string'); console.log(map.get(1)); // output: "one" console.log(map.get('1')); // output: "one string"